/**
 * 聊天消息逆向分页工具（最新消息在底部，加载历史消息时向上追加）
 * @class ChatPagination
 * @param {Array} messages 完整消息数组（按时间排序，最新的在最后）
 * @param {number} pageSize 每页显示条数（默认20）
 */ 
export default class ChatPagination {
  constructor(messages = [], pageSize = 20) {
    this.rawMessages = [...messages]; // 原始消息数组（最新消息在末尾）
    this.pageSize = Math.max(1, pageSize); // 每页条数
    this.currentPage = 1; // 当前页码（1表示包含最新消息的一页）
  }

  /**
   * 获取总页数（按逆向逻辑计算：最后一页是第1页，最前一页是总页数）
   * @returns {number} 总页数
   */
  get totalPages() {
    return Math.ceil(this.rawMessages.length / this.pageSize) || 1;
  }

  /**
   * 获取当前页需要渲染的消息（最新消息在底部）
   * @returns {Array} 当前页消息数组（按时间正序排列，直接渲染即可）
   */
get currentMessages() {
  // 逆向分页逻辑：第N页 = 从“总长度 - N×pageSize”到“总长度”的所有消息（包含之前所有页）
  const startIndex = Math.max(0, this.rawMessages.length - this.currentPage * this.pageSize);
  const endIndex = this.rawMessages.length; // 始终取到最后（最新消息）
  const result = this.rawMessages.slice(startIndex, endIndex);

  return result;
}

  /**
   * 获取总消息数
   * @returns {number} 总条数
   */
  get totalCount() {
    return this.rawMessages.length;
  }

  /**
   * 加载更多历史消息（向前翻页，页码+1）
   * @returns {boolean} 是否有更多历史消息
   */
  loadMoreHistory() {
    if (this.currentPage >= this.totalPages) {
      console.log("已加载全部历史消息");
      return false; // 没有更多历史消息
    }
    this.currentPage += 1;
    return true; // 加载成功
  }

  /**
   * 重置分页（当有新消息加入时调用）
   * @param {Array} newMessages 包含新消息的完整数组（最新消息在末尾）
   */
  resetWithNewMessages(newMessages) {
    this.rawMessages = [...newMessages];
    // 保持在当前页（若新消息未超过当前页范围），避免跳页
    if (this.currentPage > this.totalPages) {
      this.currentPage = this.totalPages;
    }
  }

  /**
   * 跳转到最新消息（回到第1页）
   */
  jumpToLatest() {
    this.currentPage = 1;
  }

  /**
   * 是否还有更多历史消息
   * @returns {boolean}
   */
  hasMoreHistory() {
    return this.currentPage < this.totalPages;
  }
}